package com.liujit.pay.wx.domain.params.order;

import cn.hutool.core.util.StrUtil;
import cn.hutool.json.JSONObject;

/**
 * @description: 商户门店信息
 * @author: liujun
 * @create: 2021-02-20 11:02
 */
public class OrderStoreInfo {

    /**
     * 门店编号
     */
    private String id;

    /**
     * 门店名称
     */
    private String name;

    /**
     * 地区编码
     */
    private String areaCode;

    /**
     * 详细地址
     */
    private String address;

    OrderStoreInfo(String id, String name, String areaCode, String address) {
        this.id = id;
        this.name = name;
        this.areaCode = areaCode;
        this.address = address;
    }

    /**
     * 初始化参数
     *
     * @param id 门店编号
     * @return
     */
    public static OrderStoreInfo.Builder builder(String id) {
        return new OrderStoreInfo.Builder(id);
    }

    public static class Builder {

        private String id;
        private String name;
        private String areaCode;
        private String address;

        Builder(String id) {
            this.id = id;
        }

        /**
         * 设置门店名称
         *
         * @param name 门店名称
         * @return
         */
        public OrderStoreInfo.Builder name(String name) {
            this.name = name;
            return this;
        }

        /**
         * 设置地区编码
         *
         * @param areaCode 地区编码
         * @return
         */
        public OrderStoreInfo.Builder areaCode(String areaCode) {
            this.areaCode = areaCode;
            return this;
        }

        /**
         * 设置详细地址
         *
         * @param address 详细地址
         * @return
         */
        public OrderStoreInfo.Builder address(String address) {
            this.address = address;
            return this;
        }

        public OrderStoreInfo build() {
            return new OrderStoreInfo(this.id, this.name, this.areaCode, this.address);
        }
    }

    /**
     * 转化JSON字符串
     *
     * @return
     */
    public String toJSONString() {
        JSONObject json = new JSONObject();
        // 门店编号
        json.set("id", id);
        // 门店名称
        if (StrUtil.isNotBlank(name)) {
            json.set("name", name);
        }
        // 地区编码
        if (StrUtil.isNotBlank(areaCode)) {
            json.set("area_code", areaCode);
        }
        // 详细地址
        if (StrUtil.isNotBlank(address)) {
            json.set("address", address);
        }
        return json.toString();
    }
}
